/**
 * 
 */

package com.shy.portal.dao;

import java.util.List;

import com.shy.base.dao.BaseDao;
import com.shy.base.vo.EntityTypeValue;
import com.shy.base.vo.PagerFilter;
import com.shy.portal.entity.Menu;
import com.shy.portal.entity.Permission;
import com.shy.portal.entity.Role;
import com.shy.portal.entity.User;

/**
 * <p>
 * Title: IManagerDao
 * </p>
 * <p>
 * Description:用户操作DAO层接口定义
 * </p>
 * <p>
 * Company:
 * </p>
 * 
 * @author H2013788
 */
public interface UserDao extends BaseDao<User> {

    /**
     * 根據用户名查询用户信息
     * 
     * @param username 用户名
     * @return username
     * @author H2013788
     * @date 2017/9/27下午2:45:55
     */
    User getUserByName(String username);

    /**
     * 分页查询用户信息
     * 
     * @param whereHql
     *            查询条件JQL语句，可通过工具类自动封装，JQL语句类似于HQL，但依赖于JPA与HQL有所不同
     * @param params
     *            与whereHql一一对应的参数列表，参数通过名称绑定
     * @param pagerFilter
     *            已封装的分页对象
     * @return list页面
     * @author H2013788
     * @date 2017年9月26日下午1:57:02
     */
    PagerFilter listUserByPager(String whereHql, List<EntityTypeValue> params,
            PagerFilter pagerFilter);

    /**
     * 查询当前用户具有的角色列表
     * 
     * @param userId 用户ID
     * @return 角色
     * @author H2013788
     * @date 2017年9月27日上午10:05:05
     */
    List<Role> listRoleByUserId(Integer userId);

    /**
     * 查询当前用户具有的权限列表
     * 
     * @param userId  用户id
     * @return 权限
     * @author H2013788
     * @date 2017年9月27日上午10:05:47
     */
    List<Permission> listPermissionByUserId(Integer userId);

    /**
     * 查询当前用户具有的菜单列表
     * 
     * @param userId 用户id
     * @return 菜单
     * @author H2013788
     * @date 2017/11/16下午2:18:57
     */
    List<Menu> listMenuByUserId(Integer userId);

    /**
     * 
     * @param param 用户實体
     * @return 用户實体
     * @author F5400164
     * @date 2017/12/7下午2:18:57
     */
    List<User> listUserByParam(String whereHql, List<EntityTypeValue> params);
    
    
    /**
     * 查询登錄日志
     * @param username
     * @param ip
     * @return
     * @author H2013788
     * @date 2018/9/8
     */
    public PagerFilter listLogByPage(String whereHql, List<EntityTypeValue> params, PagerFilter pagerFilter);


}
